package com.eptok.yspay.opensdkjava;

import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.eptok.yspay.opensdkjava.common.Constants;
import com.eptok.yspay.opensdkjava.orderpay.ScanCodePayApi;
import com.eptok.yspay.opensdkjava.pojo.vo.OnlineReqDataVo;
import com.eptok.yspay.opensdkjava.util.DateUtil;

import java.util.HashMap;
import java.util.Map;

/**
 * @Author YIFan
 * @Date 2022/4/6 14:47
 * @Version 1.0
 * @DESC //TODO
 */
public class Alipay {

    public static void main(String[] args) throws Exception {
        OnlineReqDataVo vo = new OnlineReqDataVo();
        vo.setSignType(Constants.YSF_SIGN_TYPE_SM2);
        vo.setReturnUrl("https://v0710.top");
        vo.setTranType("1");
        vo.setReqUrl("https://qrcode.ysepay.com/gateway.do");
        vo.setPrivateKeyFilePath("D:\\AProject\\payDoc\\qzd.sm2");
        vo.setPrivateKeyPassword("qzd2022");
        vo.setYsPublicKeyFilePath("D:\\AProject\\payDoc\\sm2businessgate.cer");
        vo.setPartnerId("826521779410035");
        vo.setNotifyUrl("https://v0710.top");

        vo.setParamData(bizContent());
        ScanCodePayApi.alipay(vo);
    }

    public static Map<String, Object> bizContent(){

        Map<String, Object> bizContent = new HashMap<>();
        //商户生成的订单号，生成规则前8位必须为交易日期，如20180525，范围跨度支持包含当天在内的前后一天，且只能由大小写英文字母、数字、下划线及横杠组成
        bizContent.put("out_trade_no", DateUtil.getDateNowYmd()+ DateUtil.getRandom(6));
        //商户日期(该参数做交易与查询时需要一致) 该日期需在当日的前后一天时间范围之内
        bizContent.put("shopdate",  DateUtil.getDateNowYmd());
        //商品的标题/交易标题/订单标题/订单关键字等。该参数最长为250个汉字
        bizContent.put("subject", "支付宝生活服务窗支付接口测试");
        //该笔订单的资金总额，单位为RMB-Yuan。取值范围为[0.01，100000000.00]，精确到小数点后两位。Number(10,2)指10位长度，2位精度
        bizContent.put("total_amount", "2.99");
        //支持币种：CNY(人民币)、HKD(港币)、USD(美元)、EUR(欧元)、JPY(日元)
        //注:不填默认是CNY(人民币)，如是非跨境商户，币种不能填HKD(港币)、USD(美元)、EUR(欧元)、JPY(日元)中的任意一种外币币种
        bizContent.put("currency", "CNY");
        //收款方银盛支付用户号
        bizContent.put("seller_id", "826521779410035");
        //收款方银盛支付客户名
        bizContent.put("seller_name", "武汉球之道科技有限公司（收银机）");
        //设置未付款交易的超时时间，一旦超时，该笔交易就会自动被关闭。
        //(需申请业务权限，权限未开通情况下该参数不生效，默认未付款交易的超时时间为7d)取值范围：1m～15d。m-分钟，h-小时，d-天。该参数数值不接受小数点，如1.5h，可转换为90m。
        //注意：设置了未付款交易超时时间的情况下，若我司在限定时间内没有收到成功支付通知，则会关闭交易，关闭后该笔交易若付款方支付成功的情况下，会自动原路退款至付款方
        bizContent.put("timeout_express","1h");
        //业务扩展参数，一个json字符串,order_mode订单模式，暂时可选的值为:00 代表购物车模式;seller_list参与分账的收款方信息数组，每个元素包含seller_id收款方银盛支付用户号。
        //实时分账业务，order_mode和seller_list均不能为空，order_mode的值必须为00
//        bizContent.put("extend_params","{\"cartTYpe\": \"00\",\"order_mode\": \"01\",\"seller_list\": [{\"seller_id\": \"123\"},{\"seller_id\": \"456\"}]}");
        //公用回传参数
        bizContent.put("extra_common_param", "extra_common_param");
        //业务代码
        bizContent.put("business_code", "3010002");
        //买家支付宝账号，和buger_id不能同时为空(可空)
        bizContent.put("buyer_logon_id", "233423423");
        //买家支付宝用户ID，和buyer_logon_id不能同时为空。
        //buyer_id获取方法：https://doc.open.alipay.com/doc2/detail.htm?spm=a219a.7629140.0.0.8ujLD6&treeId=115&articleId=104114&docType=1通过网页授权获取用户信息，同步响应结果中的user_id对应文档中的buyer_id
        bizContent.put("buyer_id", "23342342233");


        //=================二级商户信息, Json格式=================
        //如果有值则二级商户信息都不能为空，如果没值则都不能有值
//        JSONObject subMerchantInfoJson = new JSONObject();
//        subMerchantInfoJson.put("merName","");//二级商户名称,支持25个中文
//        subMerchantInfoJson.put("merShortName","");//二级商户简称,支持25个中文
//        subMerchantInfoJson.put("merAddr","");//二级商户地址,支持100个中文
//        subMerchantInfoJson.put("telephone","");//固定电话/手机号码二选一
//        subMerchantInfoJson.put("merNo","");//二级商户编号
//        subMerchantInfoJson.put("category","");//类目，按附件内容输入类目编号
//        subMerchantInfoJson.put("mrchntCertId","");//身份证号,只支持身份证格式(DES加密，密钥为商户号前8位，不足8位在商户号前补空格)
        //二级商户json格式
//        bizContent.put("sub_merchant",subMerchantInfoJson);


        //=================收货人信息json格式(可空)=================
//        JSONObject consigneeInfoJson = new JSONObject();
//        subMerchantInfoJson.put("consigneeName","");//收货人姓名
//        subMerchantInfoJson.put("consigneeAddr","");//收货地址
//        subMerchantInfoJson.put("transportationInfo","");//物流配送信息（物流名称+订单号）
//        subMerchantInfoJson.put("commodityName","");//商品名称
//        subMerchantInfoJson.put("commodityNumber","");//商品数量
//        //收货人信息json格式
//        bizContent.put("consignee_info",consigneeInfoJson);


        //订单所属省编号（省市编号必须同时为空或者同时非空、并且需要符合层级关系）（特殊可空）
        bizContent.put("province",null);
        //订单所属市编号（省市编号必须同时为空或者同时非空、并且需要符合层级关系）（特殊可空）
        bizContent.put("city",null);
        //是否限制信用卡。值为1表示禁用信用卡，0或为空表示不限制,2禁用花呗，3禁用花呗分期，4禁用所有信用支付类型
        bizContent.put("limit_credit_pay","3");
        //花呗分期期数,仅在支付宝支付的时候生效,目前期数支持6,12
//        bizContent.put("hb_fq_num","6");
        //是否允许多次支付,Y：允许;N：不允许（参数为空或者Y时，默认该笔订单交易状态非成功状态时，支持选择其他支付方式继续付款，适用于收银台模式。 当为N时表示该笔订单交易状态为失败状态时，不支持选择其他支付方式继续付款，收银台模式下建议该参数为空）
        bizContent.put("allow_repeat_pay","N");
        //失败通知地址（交易状态为失败时，银盛支付服务器主动通知商户网站里指定的页面http路径，支持多个url进行异步通知，多个url用分隔符“,”分开，格式如：url1,url2,url3）注：只有不允许重复支付的交易才会通知
        bizContent.put("fail_notify_url","http://127.0.0.1");


        //================支付宝营销单品详情列表(可空	)=================
        JSONArray aliGoodsDetails = new JSONArray();
        //================支付宝营销单品详情aliGoodsDetail=================
        JSONObject aliGoodsDetail = new JSONObject();
        aliGoodsDetail.put("goods_id","Shouji_abcef_001-001");//营销单品编号
        aliGoodsDetail.put("alipay_goods_id","1001");//营销单品支付宝侧编号
        aliGoodsDetail.put("goods_name","手机");//营销单品名称
        aliGoodsDetail.put("quantity",1000);//数量，只能是正整数
        aliGoodsDetail.put("price",100.20);//[0,999999999] 左闭右闭区间，小数点后最多允许两位
        aliGoodsDetail.put("goods_category","");//营销单品类目
        aliGoodsDetail.put("categories_tree","");//营销单品类目树
        aliGoodsDetail.put("body","");//营销单品描述
        aliGoodsDetail.put("show_url","");//营销单品展示地址
        aliGoodsDetails.add(aliGoodsDetail);
        //支付宝营销单品详情列表
        bizContent.put("aliGoodsDetails",aliGoodsDetails);

        bizContent.put("submer_ip","112.112.112.112");//子商户ip(可空	)


        return bizContent;
    }

}
